package com.ruoyi.manufacturer;

import lombok.Data;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

/**
 * 控制指令
 */
@Data
public class MessageVo {
    /**
     * 消息类型
     */
    private String type;

    /** 设备 **/
    private List<Device> device;

    /** 告警 **/
    private List<Alarm> alarm;

    /** 监测数据 **/
    private List<Business> business;

    /** 上报时间 **/
    private Date time;

    public void addDevice(Device device){
        if(this.device == null){
            this.device = new ArrayList<>();
        }
        this.device.add(device);
    }

    public void addAlarm(Alarm alarm){
        if(this.alarm == null){
            this.alarm = new ArrayList<>();
        }
        this.alarm.add(alarm);
    }

    public void addBusiness(Business business){
        if(this.business == null){
            this.business = new ArrayList<>();
        }
        this.business.add(business);
    }

    /**
     * 设备信息
     */
    @Data
    public static class Device{
        /** 外部唯一主键 **/
        private String id;
        /** 网关代码 **/
        private String netCode;
        /** 控制器代码 **/
        private String controllerCode;
        /** 设备代码 **/
        private String code;
        /** 设备名称 **/
        private String name;
        /** 设备型号 **/
        private String model;
        /** 设备类型 **/
        private String type;
        /** 扩展参数 **/
        private String extras;
    }


    /**
     * 告警信息
     */
    @Data
    public static class Alarm{
        /** 外部唯一主键 **/
        private String id;
        /** 设备代码 **/
        private String deviceCode;
        /** 事件代码 **/
        private String eventCode;
        /** 事件状态：1产生，2撤销 **/
        private String eventStatus="1";
        /** 事件描述 **/
        private String eventDesc;
        /** 告警时间 **/
        private Date alarmTime;
        /** 告警图片 **/
        private String alarmImg;
        /** 告警视频 **/
        private String alarmVideo;
    }


    /**
     * 监测数据
     */
    @Data
    public static class Business{
        /** 外部唯一主键 **/
        private String id;
        /** 设备代码 **/
        private String deviceCode;
        /** 指标名称 **/
        private String analogName;
        /** 模拟量单位 **/
        private String analogType;
        /** 模拟量值 **/
        private BigDecimal analogValue;
        /** 监测时间 **/
        private Date time;
        /** 高阈值 **/
        private BigDecimal thresholdHigh;
        /** 低阈值 **/
        private BigDecimal thresholdLow;
        /** 低阈值 **/
        private String content;
    }
}
